import { Injectable } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { AxiosRequestConfig } from 'axios';
import * as tencentcloud from 'tencentcloud-sdk-nodejs-lkeap'
import AppConfig from "../../config/app.config";

const LkeapClient = tencentcloud.lkeap.v20240522.Client;

// 实例化一个认证对象，入参需要传入腾讯云账户 SecretId 和 SecretKey，此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考，建议采用更安全的方式来使用密钥，请参见：https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
const clientConfig = {
    credential: {
        secretId: AppConfig.ApiKeyConfig.tencent.secretId,
        secretKey: AppConfig.ApiKeyConfig.tencent.secretKey,
    },
    region: "ap-shanghai",
    profile: {
        httpProfile: {
            endpoint: "lkeap.tencentcloudapi.com",
        },
    },
};

@Injectable()
export class TencentService {
    constructor() {}

    chatComp(content: string, model: string, msg: Function, close: Function): Promise<any> {
        const client = new LkeapClient(clientConfig);
        const params = {
            Model: model,
            Stream: true,
            Temperature: 0.6,
            Messages: [{ "Role": "user", "Content": content }]
        };
        return client.ChatCompletions(params).then(
            async (res) => {
                // @ts-ignore
                if (typeof res.on === "function") {
                    // 流式响应
                    // @ts-ignore
                    res.on("message", (message) => {
                        msg && msg(message)
                    })
                    // @ts-ignore
                    res.on("close", () => {
                        close && close()
                    })
                } else {
                    // 非流式响应
                    console.log('response', res)
                }
            },
            (err) => {
                console.error("error", err);
            }
        );
    }

}
